home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
501-525
/
disk_519
/
avlsort
/
getline.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
1KB
|
59 lines
#include <stdio.h>
#include <ctype.h>
#include "getline.h"
#define ISSPACE(c) (isascii(c) && isspace(c))
/*----------------------------
* Read a line from text file.
*----------------------------
*/
int __regargs
getline (char *buffer, unsigned long textmax, int tabstop, FILE *fd)
{
register unsigned long len = 0;
register int ch = ~EOF;
if ( !buffer || !textmax || !fd || feof(fd) )
return (-1);
while (len+1 < textmax)
{
ch = getc(fd);
if (ch==EOF || ch=='\0' || ch=='\n' || ch=='\r' || ch=='\f')
break;
if (!tabstop)
buffer[len++] = ch;
else if (tabstop < 0)
{
if (!ISSPACE(ch))
buffer[len++] = ch;
else if (!len)
continue;
else if (ISSPACE(buffer[len-1]))
continue;
else
buffer[len++] = ' ';
}
else if (ch == '\t')
{
while (len+1 < textmax)
{
buffer[len++] = ' ';
if ( (len % tabstop) == 0 )
break;
}
}
else
buffer[len++] = ch;
}
if (tabstop < 0)
while (len && ISSPACE(buffer[len-1]))
--len;
buffer[len] = '\0';
return (ch == EOF && len == 0) ? -1 : (int)len;
}